﻿#region License
/* Copyright (C) 2009 Tim Coulter
 * 
 * This file is part of ExtremeML.
 * 
 * ExtremeML is free software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation either version
 * 2 of the License, or (at your option) any later version.
 * 
 * ExtremeML is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
 * the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
*/
#endregion

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;

namespace ExtremeML.Builder
{
	/// <summary>
	/// Enumerates the classifications of properties of a wrapped type.
	/// </summary>
	public enum PropertyCategory
	{
		/// <summary>
		/// A .Net framework type that maps directly to a property on the wrapped type.
		/// </summary>
		Scalar,
		/// <summary>
		/// A pre-defined SDK simple type that maps to a property on the wrapped type via a conversion.
		/// </summary>
		Simple,
		/// <summary>
		/// An enumeration that maps to a property on the wrapped type via the EnumValue generic type.
		/// </summary>
		Enum,
		/// <summary>
		/// An <see cref="OpenXmlPart"/> that is exposed via a wrapper type.
		/// </summary>
		PartWrapper,
		/// <summary>
		/// A set of a <see cref="OpenXmlPart"/> subclass that is exposed via a collection wrapper type.
		/// </summary>
		PartWrapperCollection,
		/// <summary>
		/// An <see cref="OpenXmlPartRootElement"/> that is exposed via a wrapper type.
		/// </summary>
		RootElementWrapper,
		/// <summary>
		/// An <see cref="OpenXmlElement"/> that is exposed via a wrapper type.
		/// </summary>
		ElementWrapper,
		/// <summary>
		/// An <see cref="OpenXmlElement"/> that is exposed via a wrapper type but
		/// that does not have a corresponding mapped property on the wrapped type.
		/// </summary>
		IsolatedChildElementWrapper,
		/// <summary>
		/// A set of a <see cref="OpenXmlElement"/> that is exposed via a collection wrapper type.
		/// </summary>
		ElementWrapperCollection,
		/// <summary>
		/// Explicitly excluded property types (e.g. references to the parent part or element).
		/// </summary>
		Ignore,
		/// <summary>
		/// Any other type.
		/// </summary>
		Unsupported
	}
}
